package main

import (
	"container/ring"
	"fmt"
)

func main() {
	//Link 将环 r 与环 s 连接起来，使得 r.Next() 变为 s 并返回 r.Next() 的原始值。 r 不能为空。
	//
	//如果 r 和 s 指向同一个环，连接它们会从环中删除 r 和 s 之间的元素。 被移除的元素形成一个子环，结果是对该子环的引用（如果没有元素被移除，结果仍然是 r.Next() 的原始值，而不是 nil）。
	//
	//如果 r 和 s 指向不同的环，将它们连接起来会创建一个单环，s 的元素插入在 r 之后。 结果指向插入后 s 的最后一个元素之后的元素。

	//r := ring.New(5)
	//r1 := ring.New(5)
	//r.Link(r1)

	// Create two rings, r and s, of size 2
	r := ring.New(2)
	s := ring.New(2)

	// Get the length of the ring
	lr := r.Len()
	ls := s.Len()

	// Initialize r with 0s
	for i := 0; i < lr; i++ {
		r.Value = 0
		r = r.Next()
	}

	// Initialize s with 1s
	for j := 0; j < ls; j++ {
		s.Value = 1
		s = s.Next()
	}

	// Link ring r and ring s
	rs := r.Link(s)

	// Iterate through the combined ring and print its contents
	rs.Do(func(p interface{}) {
		fmt.Println(p.(int))
	})
}
